package com.awifi.dbus.proxy;


import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Component("logAspect")	//让这个切面类为 spring 容器管理
@Aspect			//声明这个类一个切面类
public class LoaAspect {
	
	/**
	 * 函数调用之前执行
	 * 不带切入点的最简形式
	 */
	@Before("execution(* com.awifi.dbus.dao.*.add(..))"
			+ " || execution(* com.awifi.dbus.dao.*.del(..))")
	public void logStart(){
		System.out.println("------------加入日志------------------");
		
	}
	
	/**
	 * 函数调用之后执行
	 * 待切入点信息的形式  JoinPoint jp 对象保存了切入点对象的信息.
	 */
	@After("execution(* com.awifi.dbus.dao.*.add(..))"
			+ " || execution(* com.awifi.dbus.dao.*.del(..))")
	public void logEnd( JoinPoint jp ) {
		//对象名字
		System.out.println( "对象名字: " + jp.getTarget().toString() );
		//得到执行的方法
		System.out.println( "执行的方法" + jp.getSignature().getName() );
	}
	
	/**
	 * 函数调用之后执行。
	 * @throws Throwable 
	 */
	@Around( "execution(* com.awifi.dbus.dao.*.del(..) )" )
	public void logAround( ProceedingJoinPoint pjp ) throws Throwable{
		System.out.println( "开始在 around 加入开始日志" );
		pjp.proceed();	//执行程序
		System.out.println( "开始在 around 加入结束日志" );
	}
	
}











